// 配置路由
import Vue from 'vue';
import VueRouter from 'vue-router';
import store from '@/store'; // 确保正确导入 store
import routes from './routes'; // 导入路由配置

Vue.use(VueRouter);

let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;

// 重写 push 方法
VueRouter.prototype.push = function(location, resolve, reject) {
   if (resolve && reject) {
       originPush.call(this, location, resolve, reject);
   } else {
       originPush.call(this, location, () => {}, () => {});
   }
}

// 重写 replace 方法
VueRouter.prototype.replace = function(location, resolve, reject) {
   if (resolve && reject) {
       originReplace.call(this, location, resolve, reject);
   } else {
       originReplace.call(this, location, () => {}, () => {});
   }
}

// 创建 VueRouter 实例
const router = new VueRouter({
    routes,
    // 路由跳转时,滚动条在页面顶部
    scrollBehavior(to, from, savePosition) {
        return { y: 0 };
    }
});

// 设置全局前置守卫
router.beforeEach(async (to, from, next) => {
    let token = store.state.user.token;
    let name = store.state.user.userInfo.name; // 确保 userInfo 中的 name 属性路径正确

    if (token) {
        if (to.path === '/login') {
            // 用户已登录，重定向到首页
            next('/home');
        } else {
            // 用户已登录，且访问的不是 /login
            if (name) {
                next(); // 用户名存在，直接放行
            } else {
                // 用户名不存在，尝试获取用户信息
                try {
                    await store.dispatch('getUserInfo');
                    next(); // 获取成功，放行
                } catch (error) {
                    // 获取失败，可能是 token 失效，清除 token 并重新登录
                    await store.dispatch('userLogout');
                    next('/login'); // 重定向到登录页面
                }
            }
        }
    } else {
        // 未登录不能去交易相关界面，支付相关界面，个人中心相关界面
       let toPath= to.path;
        if(toPath.indexOf('/trade')!=-1 || toPath.indexOf('/pay')!=-1 || toPath.indexOf('/center')!=-1){
            //记录当前路由地址
            next('/login?redirect=' + toPath); 
       }else{
           next();
    }
    }
});

export default router;